{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting MNIST_data/train-images-idx3-ubyte.gz\n",
      "Extracting MNIST_data/train-labels-idx1-ubyte.gz\n",
      "Extracting MNIST_data/t10k-images-idx3-ubyte.gz\n",
      "Extracting MNIST_data/t10k-labels-idx1-ubyte.gz\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"MNIST_data/\")\n",
    "trX, trY, teX, teY = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "class StackedAutoEncoder(object):\n",
    "    def __init__(self, list1, eta = 0.02):\n",
    "        \"\"\"\n",
    "        list1: [input_dimension, hidden_layer_1, ....,hidden_layer_n]\n",
    "        \"\"\"\n",
    "        N = len(list1)-1\n",
    "        self._m = list1[0]\n",
    "        self.learning_rate = eta\n",
    "        \n",
    "        # Create the Computational graph\n",
    "        self._W = {}\n",
    "        self._b = {}\n",
    "        self._X = {}\n",
    "        self._X['0'] = tf.placeholder('float', [None, list1[0]])\n",
    "        \n",
    "        for i in range(N):\n",
    "            layer = '{0}'.format(i+1)\n",
    "            print('AutoEncoder Layer {0}: {1} --> {2}'.format(layer, list1[i], list1[i+1]))\n",
    "            self._W['E' + layer] = tf.Variable(tf.random_normal(shape=(list1[i], list1[i+1])),name='WtsEncoder'+layer)\n",
    "            self._b['E'+ layer] = tf.Variable(np.zeros(list1[i+1]).astype(np.float32),name='BiasEncoder'+layer)\n",
    "            self._X[layer] = tf.placeholder('float', [None, list1[i+1]])\n",
    "            self._W['D' + layer] = tf.transpose(self._W['E' + layer])    # Shared weights\n",
    "            self._b['D' + layer] = tf.Variable(np.zeros(list1[i]).astype(np.float32),name='BiasDecoder' + layer)\n",
    "            \n",
    "        \n",
    "        \n",
    "        # Placeholder for inputs\n",
    "        self._X_noisy = tf.placeholder('float', [None, self._m])\n",
    "        \n",
    "        self.train_ops = {}\n",
    "        self.out = {}\n",
    "           \n",
    "                              \n",
    "        for i in range(N):\n",
    "            layer = '{0}'.format(i+1)\n",
    "            prev_layer = '{0}'.format(i)\n",
    "            opt = self.pretrain(self._X[prev_layer], layer)\n",
    "            self.train_ops[layer] = opt\n",
    "            self.out[layer] = self.one_pass(self._X[prev_layer], self._W['E'+layer], self._b['E'+layer], self._b['D'+layer])\n",
    "            \n",
    "             \n",
    "        self.y = self.encoder(self._X_noisy,N)    #Encoder output \n",
    "              \n",
    "        self.r = self.decoder(self.y,N)  # Decoder ouput\n",
    "        \n",
    "        \n",
    "        optimizer = tf.train.AdamOptimizer(self.learning_rate)           \n",
    "        error = self._X['0'] - self.r  # Reconstruction Error\n",
    "        \n",
    "        self._loss = tf.reduce_mean(tf.pow(error, 2))\n",
    "        self._opt = optimizer.minimize(self._loss)\n",
    "        \n",
    "        \n",
    "                                               \n",
    "    def encoder(self, X, N):\n",
    "        x = X\n",
    "        for i in range(N):\n",
    "            layer = '{0}'.format(i+1)\n",
    "            hiddenE = tf.nn.sigmoid(tf.matmul(x, self._W['E'+layer]) + self._b['E'+layer])\n",
    "            x = hiddenE\n",
    "        return x\n",
    "            \n",
    "        \n",
    "    def decoder(self, X, N):\n",
    "        x = X\n",
    "        for i in range(N,0,-1):\n",
    "            layer = '{0}'.format(i)\n",
    "            hiddenD = tf.nn.sigmoid(tf.matmul(x, self._W['D'+layer]) + self._b['D'+layer])\n",
    "            x = hiddenD\n",
    "        return x\n",
    "    \n",
    "       \n",
    "            \n",
    "    def set_session(self, session):\n",
    "        self.session = session\n",
    "        \n",
    "    def reconstruct(self,x, n_layers):\n",
    "        h = self.encoder(x, n_layers)\n",
    "        r = self.decoder(h, n_layers)\n",
    "        return self.session.run(r, feed_dict={self._X['0']: x})\n",
    "    \n",
    "    def pretrain(self, X, layer ):\n",
    "        y = tf.nn.sigmoid(tf.matmul(X, self._W['E'+layer]) + self._b['E'+layer])\n",
    "        r =tf.nn.sigmoid(tf.matmul(y, self._W['D'+layer]) + self._b['D'+layer])\n",
    "        \n",
    "        # Objective Function\n",
    "        error = X - r  # Reconstruction Error\n",
    "        \n",
    "        loss = tf.reduce_mean(tf.pow(error, 2))\n",
    "        opt = tf.train.AdamOptimizer(.001).minimize(loss, var_list = \n",
    "                                                       [self._W['E'+layer],self._b['E'+layer],self._b['D'+layer]])\n",
    "              \n",
    "        return opt\n",
    "            \n",
    "  \n",
    "    def one_pass(self, X, W, b, c):\n",
    "        h = tf.nn.sigmoid(tf.matmul(X, W) + b)\n",
    "        return h\n",
    "    \n",
    "   \n",
    "    \n",
    "        \n",
    "        \n",
    "    def fit(self, Xtrain, Xtr_noisy, layers, epochs = 1, batch_size = 100):\n",
    "        N, D = Xtrain.shape\n",
    "        num_batches = N // batch_size\n",
    "        X_noisy = {}\n",
    "        X = {}\n",
    "        X_noisy ['0'] = Xtr_noisy\n",
    "        X['0'] = Xtrain\n",
    "        \n",
    "        for i in range(layers):\n",
    "            Xin = X[str(i)]\n",
    "            print('Pretraining Layer ', i+1)\n",
    "            for e in range(5):\n",
    "                for j in range(num_batches):\n",
    "                    batch = Xin[j * batch_size: (j * batch_size + batch_size)]\n",
    "                    self.session.run(self.train_ops[str(i+1)], feed_dict= {self._X[str(i)]: batch})\n",
    "            print('Pretraining Finished')\n",
    "            X[str(i+1)] = self.session.run(self.out[str(i+1)], feed_dict = {self._X[str(i)]: Xin})\n",
    "            \n",
    "                \n",
    "                    \n",
    "        obj = []\n",
    "        for i in range(epochs):\n",
    "            for j in range(num_batches):\n",
    "                batch = Xtrain[j * batch_size: (j * batch_size + batch_size)]\n",
    "                batch_noisy = Xtr_noisy[j * batch_size: (j * batch_size + batch_size)]\n",
    "                _, ob = self.session.run([self._opt,self._loss], feed_dict={self._X['0']: batch, self._X_noisy: batch_noisy})\n",
    "                if j % 100 == 0 :\n",
    "                    print('training epoch {0} batch {2} cost {1}'.format(i,ob, j)) \n",
    "                obj.append(ob)\n",
    "        return obj"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def corruption(x, noise_factor = 0.3): #corruption of the input\n",
    "    noisy_imgs = x + noise_factor * np.random.randn(*x.shape)\n",
    "    noisy_imgs = np.clip(noisy_imgs, 0., 1.)\n",
    "    return noisy_imgs\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AutoEncoder Layer 1: 784 --> 500\n",
      "AutoEncoder Layer 2: 500 --> 50\n",
      "Pretraining Layer  1\n",
      "Pretraining Finished\n",
      "Pretraining Layer  2\n",
      "Pretraining Finished\n",
      "training epoch 0 batch 0 cost 0.10150674730539322\n",
      "training epoch 0 batch 100 cost 0.0675622746348381\n",
      "training epoch 0 batch 200 cost 0.06065288931131363\n",
      "training epoch 0 batch 300 cost 0.0563741996884346\n",
      "training epoch 0 batch 400 cost 0.055308450013399124\n",
      "training epoch 0 batch 500 cost 0.05168097838759422\n",
      "training epoch 1 batch 0 cost 0.052292823791503906\n",
      "training epoch 1 batch 100 cost 0.04790482670068741\n",
      "training epoch 1 batch 200 cost 0.04341510310769081\n",
      "training epoch 1 batch 300 cost 0.04291597381234169\n",
      "training epoch 1 batch 400 cost 0.04015181586146355\n",
      "training epoch 1 batch 500 cost 0.03876486420631409\n",
      "training epoch 2 batch 0 cost 0.039591532200574875\n",
      "training epoch 2 batch 100 cost 0.03708085045218468\n",
      "training epoch 2 batch 200 cost 0.03656088560819626\n",
      "training epoch 2 batch 300 cost 0.03425168618559837\n",
      "training epoch 2 batch 400 cost 0.0352790541946888\n",
      "training epoch 2 batch 500 cost 0.03453643620014191\n",
      "training epoch 3 batch 0 cost 0.034410469233989716\n",
      "training epoch 3 batch 100 cost 0.03289879485964775\n",
      "training epoch 3 batch 200 cost 0.03128533065319061\n",
      "training epoch 3 batch 300 cost 0.029780948534607887\n",
      "training epoch 3 batch 400 cost 0.02828480675816536\n",
      "training epoch 3 batch 500 cost 0.027443168684840202\n",
      "training epoch 4 batch 0 cost 0.02846788614988327\n",
      "training epoch 4 batch 100 cost 0.02594815194606781\n",
      "training epoch 4 batch 200 cost 0.02487267553806305\n",
      "training epoch 4 batch 300 cost 0.025064997375011444\n",
      "training epoch 4 batch 400 cost 0.024530313909053802\n",
      "training epoch 4 batch 500 cost 0.02502789907157421\n",
      "training epoch 5 batch 0 cost 0.025233834981918335\n",
      "training epoch 5 batch 100 cost 0.024073639884591103\n",
      "training epoch 5 batch 200 cost 0.0236603282392025\n",
      "training epoch 5 batch 300 cost 0.024222392588853836\n",
      "training epoch 5 batch 400 cost 0.023220760747790337\n",
      "training epoch 5 batch 500 cost 0.0238934513181448\n",
      "training epoch 6 batch 0 cost 0.02417331375181675\n",
      "training epoch 6 batch 100 cost 0.023796753957867622\n",
      "training epoch 6 batch 200 cost 0.02233877032995224\n",
      "training epoch 6 batch 300 cost 0.02326393686234951\n",
      "training epoch 6 batch 400 cost 0.02295631170272827\n",
      "training epoch 6 batch 500 cost 0.023647410795092583\n",
      "training epoch 7 batch 0 cost 0.022779719904065132\n",
      "training epoch 7 batch 100 cost 0.021547462791204453\n",
      "training epoch 7 batch 200 cost 0.021135708317160606\n",
      "training epoch 7 batch 300 cost 0.022250570356845856\n",
      "training epoch 7 batch 400 cost 0.021589677780866623\n",
      "training epoch 7 batch 500 cost 0.022222118452191353\n",
      "training epoch 8 batch 0 cost 0.022283054888248444\n",
      "training epoch 8 batch 100 cost 0.020761379972100258\n",
      "training epoch 8 batch 200 cost 0.020124206319451332\n",
      "training epoch 8 batch 300 cost 0.021525640040636063\n",
      "training epoch 8 batch 400 cost 0.021246591582894325\n",
      "training epoch 8 batch 500 cost 0.021577544510364532\n",
      "training epoch 9 batch 0 cost 0.021115558221936226\n",
      "training epoch 9 batch 100 cost 0.01976058818399906\n",
      "training epoch 9 batch 200 cost 0.01966874673962593\n",
      "training epoch 9 batch 300 cost 0.02128107100725174\n",
      "training epoch 9 batch 400 cost 0.01989569142460823\n",
      "training epoch 9 batch 500 cost 0.020549237728118896\n",
      "training epoch 10 batch 0 cost 0.020715733990073204\n",
      "training epoch 10 batch 100 cost 0.018901783972978592\n",
      "training epoch 10 batch 200 cost 0.01894647628068924\n",
      "training epoch 10 batch 300 cost 0.020363539457321167\n",
      "training epoch 10 batch 400 cost 0.019631581380963326\n",
      "training epoch 10 batch 500 cost 0.020475056022405624\n",
      "training epoch 11 batch 0 cost 0.020497245714068413\n",
      "training epoch 11 batch 100 cost 0.019061578437685966\n",
      "training epoch 11 batch 200 cost 0.018700500950217247\n",
      "training epoch 11 batch 300 cost 0.020467620342969894\n",
      "training epoch 11 batch 400 cost 0.020080333575606346\n",
      "training epoch 11 batch 500 cost 0.020616315305233\n",
      "training epoch 12 batch 0 cost 0.020045796409249306\n",
      "training epoch 12 batch 100 cost 0.020719848573207855\n",
      "training epoch 12 batch 200 cost 0.019543007016181946\n",
      "training epoch 12 batch 300 cost 0.022456247359514236\n",
      "training epoch 12 batch 400 cost 0.02017081528902054\n",
      "training epoch 12 batch 500 cost 0.020762208849191666\n",
      "training epoch 13 batch 0 cost 0.021006034687161446\n",
      "training epoch 13 batch 100 cost 0.019163982942700386\n",
      "training epoch 13 batch 200 cost 0.0189439058303833\n",
      "training epoch 13 batch 300 cost 0.0215759314596653\n",
      "training epoch 13 batch 400 cost 0.018741119652986526\n",
      "training epoch 13 batch 500 cost 0.020096182823181152\n",
      "training epoch 14 batch 0 cost 0.01954065077006817\n",
      "training epoch 14 batch 100 cost 0.018662825226783752\n",
      "training epoch 14 batch 200 cost 0.018104135990142822\n",
      "training epoch 14 batch 300 cost 0.019495291635394096\n",
      "training epoch 14 batch 400 cost 0.01833440735936165\n",
      "training epoch 14 batch 500 cost 0.019673433154821396\n",
      "training epoch 15 batch 0 cost 0.01922355405986309\n",
      "training epoch 15 batch 100 cost 0.01792343147099018\n",
      "training epoch 15 batch 200 cost 0.017566345632076263\n",
      "training epoch 15 batch 300 cost 0.018396643921732903\n",
      "training epoch 15 batch 400 cost 0.018582142889499664\n",
      "training epoch 15 batch 500 cost 0.01867305487394333\n",
      "training epoch 16 batch 0 cost 0.01923174224793911\n",
      "training epoch 16 batch 100 cost 0.017914773896336555\n",
      "training epoch 16 batch 200 cost 0.01739632338285446\n",
      "training epoch 16 batch 300 cost 0.017656803131103516\n",
      "training epoch 16 batch 400 cost 0.017866455018520355\n",
      "training epoch 16 batch 500 cost 0.01892351359128952\n",
      "training epoch 17 batch 0 cost 0.01824272610247135\n",
      "training epoch 17 batch 100 cost 0.01796405017375946\n",
      "training epoch 17 batch 200 cost 0.017782112583518028\n",
      "training epoch 17 batch 300 cost 0.01826743222773075\n",
      "training epoch 17 batch 400 cost 0.017778713256120682\n",
      "training epoch 17 batch 500 cost 0.01880100555717945\n",
      "training epoch 18 batch 0 cost 0.01880783960223198\n",
      "training epoch 18 batch 100 cost 0.018224382773041725\n",
      "training epoch 18 batch 200 cost 0.017311083152890205\n",
      "training epoch 18 batch 300 cost 0.017776448279619217\n",
      "training epoch 18 batch 400 cost 0.017769699916243553\n",
      "training epoch 18 batch 500 cost 0.01919466070830822\n",
      "training epoch 19 batch 0 cost 0.018730001524090767\n",
      "training epoch 19 batch 100 cost 0.01794912852346897\n",
      "training epoch 19 batch 200 cost 0.01732807792723179\n",
      "training epoch 19 batch 300 cost 0.01882951334118843\n",
      "training epoch 19 batch 400 cost 0.01794079877436161\n",
      "training epoch 19 batch 500 cost 0.01971258968114853\n",
      "training epoch 20 batch 0 cost 0.019811563193798065\n",
      "training epoch 20 batch 100 cost 0.01765282452106476\n",
      "training epoch 20 batch 200 cost 0.01818305440247059\n",
      "training epoch 20 batch 300 cost 0.02034379541873932\n",
      "training epoch 20 batch 400 cost 0.018087118864059448\n",
      "training epoch 20 batch 500 cost 0.019977888092398643\n",
      "training epoch 21 batch 0 cost 0.019315676763653755\n",
      "training epoch 21 batch 100 cost 0.01866583153605461\n",
      "training epoch 21 batch 200 cost 0.01843332126736641\n",
      "training epoch 21 batch 300 cost 0.020338328555226326\n",
      "training epoch 21 batch 400 cost 0.017475778236985207\n",
      "training epoch 21 batch 500 cost 0.018999114632606506\n",
      "training epoch 22 batch 0 cost 0.019606923684477806\n",
      "training epoch 22 batch 100 cost 0.0182544756680727\n",
      "training epoch 22 batch 200 cost 0.01815933920443058\n",
      "training epoch 22 batch 300 cost 0.019819803535938263\n",
      "training epoch 22 batch 400 cost 0.01763990707695484\n",
      "training epoch 22 batch 500 cost 0.01928655430674553\n",
      "training epoch 23 batch 0 cost 0.01951572112739086\n",
      "training epoch 23 batch 100 cost 0.017558323219418526\n",
      "training epoch 23 batch 200 cost 0.01749439723789692\n",
      "training epoch 23 batch 300 cost 0.019223185256123543\n",
      "training epoch 23 batch 400 cost 0.017603548243641853\n",
      "training epoch 23 batch 500 cost 0.019114015623927116\n",
      "training epoch 24 batch 0 cost 0.0207484383136034\n",
      "training epoch 24 batch 100 cost 0.016794100403785706\n",
      "training epoch 24 batch 200 cost 0.017187630757689476\n",
      "training epoch 24 batch 300 cost 0.018204934895038605\n",
      "training epoch 24 batch 400 cost 0.01696639508008957\n",
      "training epoch 24 batch 500 cost 0.018717020750045776\n",
      "training epoch 25 batch 0 cost 0.01842518523335457\n",
      "training epoch 25 batch 100 cost 0.016725638881325722\n",
      "training epoch 25 batch 200 cost 0.01667347550392151\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training epoch 25 batch 300 cost 0.018006179481744766\n",
      "training epoch 25 batch 400 cost 0.016520751640200615\n",
      "training epoch 25 batch 500 cost 0.01809670217335224\n",
      "training epoch 26 batch 0 cost 0.017284439876675606\n",
      "training epoch 26 batch 100 cost 0.01615685224533081\n",
      "training epoch 26 batch 200 cost 0.016008973121643066\n",
      "training epoch 26 batch 300 cost 0.016995172947645187\n",
      "training epoch 26 batch 400 cost 0.016268093138933182\n",
      "training epoch 26 batch 500 cost 0.017895421013236046\n",
      "training epoch 27 batch 0 cost 0.017639130353927612\n",
      "training epoch 27 batch 100 cost 0.016594262793660164\n",
      "training epoch 27 batch 200 cost 0.016433008015155792\n",
      "training epoch 27 batch 300 cost 0.016972912475466728\n",
      "training epoch 27 batch 400 cost 0.01648031175136566\n",
      "training epoch 27 batch 500 cost 0.018649550154805183\n",
      "training epoch 28 batch 0 cost 0.0176535677164793\n",
      "training epoch 28 batch 100 cost 0.015918292105197906\n",
      "training epoch 28 batch 200 cost 0.017061598598957062\n",
      "training epoch 28 batch 300 cost 0.01698743738234043\n",
      "training epoch 28 batch 400 cost 0.016412759199738503\n",
      "training epoch 28 batch 500 cost 0.018767183646559715\n",
      "training epoch 29 batch 0 cost 0.017695559188723564\n",
      "training epoch 29 batch 100 cost 0.016925545409321785\n",
      "training epoch 29 batch 200 cost 0.016814488917589188\n",
      "training epoch 29 batch 300 cost 0.017581596970558167\n",
      "training epoch 29 batch 400 cost 0.01638389192521572\n",
      "training epoch 29 batch 500 cost 0.018969450145959854\n"
     ]
    }
   ],
   "source": [
    "Xtrain = trX.astype(np.float32)\n",
    "Xtrain_noisy = corruption(Xtrain).astype(np.float32)\n",
    "Xtest = teX.astype(np.float32)\n",
    "Xtest_noisy = corruption(Xtest).astype(np.float32) \n",
    "_, m = Xtrain.shape\n",
    "\n",
    "list1 = [m, 500, 50]   # List with number of neurons in Each hidden layer, starting from input layer\n",
    "n_layers = len(list1)-1\n",
    "autoEncoder = StackedAutoEncoder(list1)\n",
    "\n",
    "#Initialize all variables\n",
    "init = tf.global_variables_initializer()\n",
    "\n",
    "\n",
    "    \n",
    "with tf.Session() as sess:\n",
    "    sess.run(init)\n",
    "    autoEncoder.set_session(sess)\n",
    "    err = autoEncoder.fit(Xtrain, Xtrain_noisy, n_layers, epochs=30)\n",
    "    out = autoEncoder.reconstruct(Xtest_noisy[0:100],n_layers)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x23e0737a7b8>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nLEoryX3x6gAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x23e46eb5438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(err)\n",
    "plt.xlabel('epochs')\n",
    "plt.ylabel('Fine Tuning Reconstruction Error')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nAAAAAEjA/wBtQtr7tlQ9HgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x23e05a67b00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plotting original and reconstructed images\n",
    "row, col = 2, 8\n",
    "idx = np.random.randint(0, 100, row * col // 2)\n",
    "f, axarr = plt.subplots(row, col, sharex=True, sharey=True, figsize=(20,4))\n",
    "for fig, row in zip([Xtest_noisy,out], axarr):\n",
    "    for i,ax in zip(idx,row):\n",
    "        ax.imshow(fig[i].reshape((28, 28)), cmap='Greys_r')\n",
    "        ax.get_xaxis().set_visible(False)\n",
    "        ax.get_yaxis().set_visible(False)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:tf-gpu-1p3]",
   "language": "python",
   "name": "conda-env-tf-gpu-1p3-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
